stateflow入门学习&笔记

您所在的位置:网站首页 simulink 逻辑 stateflow入门学习&笔记

stateflow入门学习&笔记

2023-09-26 16:08| 来源: 网络整理| 查看: 265

stateflow入门学习&笔记

由于课题研究需要用到stateflow,所以跟着matlab自带的互动式教程stateflow onramp先把基础学习了一下并总结了下面的笔记,笔记的顺序流程大致与stateflow onramp相符合。因为自己也是初学者,如有错误请大家多多指正。

命令行开启

sf --开启stateflow以及stateflow library框 sf -lib --开启stateflow library框 sfnew -matlab --新建一个m语言的stateflow项目 sfnew -c --新建一个c语言的stateflow项目

动作状态(state)

entry:语句/函数名 --进入状态的动作,简写为en during:表达式/函数 --处于状态中,简写为du exit:表达式/函数 --离开状态,简写为ex 三者不一定全部定义 on eventname:状态完整的接触到广播事件一次后执行的动作 on after(n,eventname):状态完整的接触到广播事件n次后执行的动作 on before(n,eventname):状态完整的接触到广播事件n次前执行的动作 on at(n,eventname):状态完整的接触到广播事件n次时执行的动作

状态转移

从一个状态框的边缘拖动光标到另一个状态框边缘画出一条转移线,双击转移线可以添加转移条件,如下所示,当双击上方转移线并键入power==1后软件会自动帮你加上方括号。 在这里插入图片描述 同时方括号内的转移条件可以用&&(与)、||(或)来连接。 execution order:条件判断顺序,首先判断是否满足转移条件1,若满足则直接转移。否则,再去判断转移条件2,以此类推。

时序逻辑

Stateflow支持使用时序逻辑,常用的时序逻辑运算符是 after(N,sec) ,其中 N 是以秒为单位的等待时间。 对于 Simulink 中的图表,时间根据模型的仿真时间进行跟踪。

默认转换

如下是一个默认转换,它指定系统的初始状态。 当向空白图表添加状态时,Stateflow 会自动添加默认转换。同时,默认转换上不允许添加任何转换条件。 在这里插入图片描述 点击下方箭头,当光标变为空心圆后可以拖动默认转换到其他状态。

不可达状态

不可达状态的状态圈周围显示为橙色,如下右侧状态所示: 在这里插入图片描述

Stateflow数据

在 Stateflow 中,图表中使用的输入、输出和局部变量称为图表数据。 所有图表数据都必须具有指定的范围。 下面列出了通用数据范围: Local Data:仅在图表中本地使用的数据。 Input:通过输入端口从 Simulink 接收信号。 Output:信号通过输出端口写入 Simulink。 Parameter:从 MATLAB 工作区或 Simulink 封装参数中读取一个常数值。 我们可以通过Symbols Pane图形界面来快速添加和删除 Stateflow 数据并分配数据范围: 在这里插入图片描述 如果一个数据具有input或output,软件将自动在Stateflow模块上创建端口: 在这里插入图片描述 如果在定义之前创建图表并添加数据,Stateflow将预测这个数据的范围,单击Resolve undefined symbols按钮可以使用软件给出的默认建议。 在这里插入图片描述 同时,可以通过Symbols Pane快速更改数据名称,更改之后需要使用Shift+Enter键来保存修改。还使用快捷键 Ctrl+Shift+A 自动排列模型以适合文本。

Chart 动作

chart操作可以在图表模拟期间执行代码。chart动作可分为以下两种。 · 状态动作(satate action):定义了当特定状态处于活动状态时 Stateflow 会做什么。 · 条件动作(Condition actions):定义了当转移条件为真时 Stateflow 会做什么。

状态动作

状态动作都以相同的格式指定,常用的三个的状态动作是entry、during和exit。 当它们听起来像它们会发生时:分别表示在进入状态时、保持在状态时和离开状态时所要执行的动作。 在这里插入图片描述 如下图中的例子,x 和 y 在进入此状态时都被设置为 1。 退出此状态时,x 被设置为 0: 在这里插入图片描述

条件动作

Stateflow 还可以执行与转换条件相关的操作。 当前面的转换条件为真时执行条件动作。 条件动作用大括号 ({}) 表示,这样可以将它们与方括号 ([]) 中的转移条件区分开来。 如下图所示,只要满足转移条件x == 1,y 就会被赋值为 1, 这个操作发生在 StateB 的状态进入操作之前: 在这里插入图片描述 如果没有设置转换条件,则转换被认为始终有效,条件动作也随转移始终执行: 在这里插入图片描述

流程图

Stateflow 可以构建逻辑模式的无状态模型的流程图,例如决策树和迭代循环。 流程图使用两种图形元素构建的:用箭头表示转换条件的转换路径。 连接点是将路径划分为段的节点,用圆圈表示。 他们可以沿着决策路径提供额外的分支。 例如如下的转换和连接可用于为 if-else 语句建模: 在这里插入图片描述

模式向导

Stateflow 提供了模式向导Pattern Wizard来简化通用流程图的创建。 这些模式包括: 决策:if、if-else 和嵌套 if 决策模式。 循环:for、while 和 do-while 循环模式。 开关:最多有四种情况的开关模式。 自定义:用户保存的自定义模式。 在这里插入图片描述 在这里插入图片描述

stateflow函数

Stateflow 支持创建可以在图中多次调用的各种类型的函数。 与文本编程一样,使用函数可以减少冗余并提高可读性。函数可以作为状态动作或条件动作。 如果一个函数返回一个布尔值,它也可以被称为转换条件。 图形函数:图形函数是包含流程图的可重复使用的图表元素。流程图可以直接插入到 Stateflow 图中。可以通过将流程图封装到图形函数中来重用此逻辑。 要添加图形功能,单击面板上fx的图标。 首次添加到模型时,图形函数框将包含一个空白函数签名、一个默认转换和一个终止节点: 在这里插入图片描述 图形函数的函数签名与文本 MATLAB 函数签名相同。 定义函数后,添加定义函数行为的图形元素: 在这里插入图片描述 通过状态或条件动作调用函数: 在这里插入图片描述

MATLAB 函数

可以将已有的MATLAB 函数合并到 Stateflow 图中,从对象选项板上的图标中单击并拖动MATLAB图标。 首次添加到模型时,MATLAB 函数框将包含一个空白函数签名和一个空函数: 在这里插入图片描述 定义 MATLAB 函数时,不需要关键字 function: 在这里插入图片描述 双击 Stateflow 中的函数以打开 MATLAB 编辑器键入函数具体内容: 在这里插入图片描述 MATLAB函数调用方式与图形函数调用方式相同。

图表层次结构

使用层次结构允许对具有共同属性或功能的状态进行分组,从而避免 Stateflow 图中的冗余。 要创建层次结构,新建一个状态,此状态必须完全包含一个或多个其他状态(可以用左键单击并拖动状态边界以调整其大小)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3